from collections import deque, Counter

from tool.vector import Vector


class VectorManager:
    def __init__(self, max_size):
        """
        初始化 VectorManager。

        :param max_size: 最大存储的向量数量
        """
        self.max_size = max_size
        self.vectors = deque()
        self.counter = Counter()

    def add_vector(self, vector):
        """
        添加向量到管理器中。如果当前存储的向量数量达到了最大数量，
        则从头部删除一个向量，然后再添加新的向量。

        :param vector: 要添加的向量（Vector 实例）
        """
        if len(self.vectors) >= self.max_size:
            # 从头部删除一个向量
            old_vector = self.vectors.popleft()
            self.counter[old_vector] -= 1
            if self.counter[old_vector] == 0:
                del self.counter[old_vector]

        # 添加新的向量到尾部
        self.vectors.append(vector)
        self.counter[vector] += 1

    def most_frequent_count(self):
        """
        返回数组中出现次数最多的向量的出现次数。

        :return: 最大出现次数
        """
        if not self.counter:
            return 0
        return max(self.counter.values())

    def clear(self):
        """
        清空管理器中的所有向量和计数。
        """
        self.vectors.clear()  # 清空 deque
        self.counter.clear()  # 清空 Counter
# Example usage
if __name__ == "__main__":
    manager = VectorManager(max_size=5)

    v1 = Vector(1, 2)
    v2 = Vector(4, 5)
    v3 = Vector(1, 2)
    v4 = Vector(7, 8)
    v5 = Vector(4, 5)

    manager.add_vector(v1)
    manager.add_vector(v2)
    manager.add_vector(v3)
    manager.add_vector(v4)
    manager.add_vector(v5)

    print(manager.most_frequent_count())  # 输出: 2

    v6 = Vector(10, 11)

    manager.add_vector(v6)  # 这将移除最旧的向量
    manager.add_vector(v6)
    manager.add_vector(v6)
    print(manager.most_frequent_count())  # 输出: 2


